<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作为属性名</title>
</head>
<body>
    <script>

        //由于每一个 Symbol 的值都是不相等的，所以 Symbol 作为对象的属性名，可以保证属性不重名。
        let sy = Symbol('key1');

        //写法1
        let syObject = {};
        syObject[sy] = 'kk';
        console.log(syObject);    //{Symbol(key1): "kk"}

        //写法2
        let syObject = {
            [sy]: "kk"
        };
        console.log(syObject);    //{Symbol(key1): "kk"}

        //写法3
        let syObject = {};
        Object.defineProperty(syObject, sy, {value: "kk"});
        console.log(syObject);  //{Symbol(key1): "kk"}

        // Symbol作为对象属性名时不能用. 运算符，要用方括号，
        // 因为.运算符后面是字符串，所以取到的是字符串sy属性，
        // 而不是Symbol值sy属性。

        // let syObject = {};
        // syObject[sy] = "kk";

        // syObject[sy];  // "kk"
        // syObject.sy;   // undefined
    </script>
</body>
</html>